Modelo de Clasificación Logistica

En este libro se implementara el analisis de datos que permitira identificar los estudiantes con altas probabilidades de fracaso en la asignatura de matematicas utilizando herramienta de machine learning

Importación de Librerias

In [36]:
# Libreria para importar las funciones que facilitan la creacion del modelo usando clasificación
import turicreate as tr

Carga de los datos

Se realiza el cargue de la informacion del documento DataEstudiantes

In [37]:
# Se determina el archivo a trabajar y se carga en una variable
# ruta = 'DataEstudiantes.csv'
ruta = 'https://drive.google.com/uc?id=12y4Yirhk1B-Cy6jMTeMPa1SHHdxAuhFm&export=download&authuser=0'
students=tr.SFrame.read_csv(ruta, '&')
Finished parsing file https://drive.google.com/uc?id=12y4Yirhk1B-Cy6jMTeMPa1SHHdxAuhFm&export=download&authuser=0
Parsing completed. Parsed 100 lines in 0.043787 secs.
------------------------------------------------------
Inferred types from first 100 line(s) of file as 
column_type_hints=[str,str,str,int,str,int,int,float,int,float,float,float,float,float,float,float,float,float,float,float,float,float,float,str,str,str,str]
If parsing fails due to incorrect types, you can correct
the inferred type list above and pass it to read_csv in
the column_type_hints argument
------------------------------------------------------
Finished parsing file https://drive.google.com/uc?id=12y4Yirhk1B-Cy6jMTeMPa1SHHdxAuhFm&export=download&authuser=0
Parsing completed. Parsed 214 lines in 0.045633 secs.

Exploración de los Datos

Se visualizan las columnas de los datos que tiene la sábana de notas

In [38]:
# El nombre de las columnas cargadas en la variable head
students.head()
Out[38]:
ESTUDIANTE R S CURSO J10 Estrato AÑO ECONOMIA FÍSICA QUÍMICA SOCIALES
AGREDO TORRES KAROL
MELISA ...
N F 1001 M 2 2016 69.7 73 60.66666667 72.0
ARIZA MARTINEZ CAMPVERLLY
SAMANTHA ...
N F 1001 M 2 2016 68.7 68 65.33333333 72.66666667
CAÑON SUAREZ JESSICA
VIVIANA ...
N F 1001 M 2 2016 42.7 45 35.0 36.66666667
CASALLAS HUERFANO LINA
MARIA ...
N F 1001 M 2 2016 74.7 63 62.66666667 73.33333333
CHUNZA GOMEZ LIZETH
ANDREA ...
N F 1001 M 2 2016 65.0 53 49.66666667 70.66666667
FARFAN PULIDO ANDRES
FELIPE ...
N M 1001 M 2 2016 43.3 43 33.33333333 23.33333333
GALINDO MORENO MARILYN
DANIELA ...
N F 1001 M 2 2016 60.7 60 57.33333333 64.66666667
GAVIRIA HERRERA SANTIAGO N M 1001 M 2 2016 62.3 52 40.33333333 59.0
GOMEZ ROMERO JONATHAN N M 1001 M 2 2016 63.0 55 51.33333333 63.33333333
GONZALEZ RODRIGUEZ HENRY
JOEL ...
N M 1001 M 2 2016 61.7 54 54.0 56.66666667
EDUCACION ARTISTICA RECREACIÓN Y DEPORTES RELIGION ETICA FILOSOFIA INGLES LENGUA CASTELLANA
78.33333333 62.33333333 68.33333333 74.66666667 80.33333333 65.66666667 71.66666667
79.33333333 71.66666667 69.33333333 73.66666667 62.33333333 60.0 74.0
40.0 53.0 46.33333333 41.66666667 30.0 42.33333333 31.66666667
78.33333333 67.66666667 76.0 75.33333333 71.0 69.0 72.33333333
57.0 52.66666667 66.66666667 70.33333333 61.0 58.66666667 64.66666667
56.0 47.66666667 48.66666667 23.33333333 38.33333333 42.0 36.66666667
81.66666667 51.0 68.0 69.66666667 61.66666667 59.0 63.33333333
67.33333333 48.33333333 56.33333333 56.66666667 60.0 53.33333333 68.66666667
61.0 66.66666667 60.33333333 73.33333333 60.0 61.0 56.66666667
67.0 66.0 64.33333333 57.0 64.0 60.66666667 58.33333333
TRIGONOMETRIA ADMINISTRACION MANEJO ORDENADORES PREPARACIÓN TECNOLÓGICA CALCULO CONVENCIONES MINISTERIO
71.33333333 78.0 79.0 70.33333333 75.66666667 BASICO
65.33333333 62.33333333 85.66666667 68.66666667 69.33333333 BASICO
36.66666667 43.66666667 48.33333333 35.66666667 -1.0 BAJO
67.33333333 77.66666667 79.0 71.33333333 77.0 BASICO
54.0 66.66666667 78.0 67.33333333 70.33333333 BASICO
24.33333333 26.66666667 60.66666667 16.66666667 -1.0 BAJO
68.33333333 66.0 74.33333333 60.66666667 73.66666667 BASICO
54.33333333 65.66666667 63.0 51.0 -1.0 BAJO
66.0 49.33333333 76.66666667 65.0 64.0 BASICO
60.0 66.0 68.66666667 62.33333333 -1.0 BAJO
C11 J11 A11
1101 M 2017
1101 M 2017
None None None
1101 M 2017
1101 M 2017
None None None
1101 M 2017
None None None
1102 M 2017
None None None
[10 rows x 27 columns]
In [39]:
students['CALCULO']
Out[39]:
dtype: float
Rows: 214
[75.66666667, 69.33333333, -1.0, 77.0, 70.33333333, -1.0, 73.66666667, -1.0, 64.0, -1.0, -1.0, 75.0, 74.33333333, -1.0, 70.3, 72.0, -1.0, 64.66666667, 66.0, 73.33333333, 72.0, 76.66666667, 70.0, 77.0, 69.33333333, 73.33333333, -1.0, 54.3, 54.3, 54.3, 54.3, -1.0, 79.33333333, 82.66666667, 68.0, -1.0, 61.33333333, 86.0, 73.33333333, 78.66666667, 71.33333333, 78.33333333, 92.0, 51.0, 66.66666667, 62.33333333, 74.66666667, 77.66666667, 77.66666667, 87.66666667, 65.66666667, 60.66666667, -1.0, 88.0, 85.66666667, 76.0, -1.0, 64.66666667, 54.3, 54.3, 54.3, 54.3, 54.3, 54.3, -1.0, 87.66666667, 67.66666667, 40.0, 67.0, 79.0, 62.0, 86.33333333, 72.0, 84.3, 65.33333333, 87.33333333, 75.0, 63.0, 65.0, 58.66666667, 78.0, 74.3, 71.66666667, 64.0, 61.0, 74.0, 67.7, 64.66666667, 69.66666667, 54.3, 54.3, 54.3, 54.3, 54.3, 54.3, 65.33333333, -1.0, 78.66666667, -1.0, 70.0, ... ]

Definir los valores para trabajar la regresion logistica

Se define el tipo de datos para la columna de calculo y se determina la cantidad de datos a trabajar

In [40]:
# Identidica el tipo de dato que tiene la columna
students['CALCULO'].dtype
# Se convierte la columna de string a float para facilitar su manipulación
students['CALCULO'] = students['CALCULO'].astype(float)
In [41]:
# Se define que los valores menores 60 el estudiante pierde la nota mayor de 60 la pasa para matematicas
students['logic_math'] = students['CALCULO'] <= 60
In [42]:
# Mostrar los Resultados
students['logic_math']
Out[42]:
dtype: int
Rows: 214
[0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, ... ]

Entrenamiento de los Datos

Se establecen los datos de entrenamiento de y de prueba para usarlos en el modelo de regresion logistica

In [43]:
# Se crean la variables que tendran los datos de entrenamiento y los datos de prueba
train_data,test_data = students.random_split(.8,seed=0)
In [44]:
# Se establece el modelo de regresion logistica
student_model = tr.logistic_classifier.create(train_data,
                                              target='logic_math',
                                              features=['CALCULO'],
                                              validation_set=test_data)
Logistic regression:
--------------------------------------------------------
Number of examples          : 181
Number of classes           : 2
Number of feature columns   : 1
Number of unpacked features : 1
Number of coefficients      : 2
Starting Newton Method
--------------------------------------------------------
+-----------+----------+--------------+-------------------+---------------------+
| Iteration | Passes   | Elapsed Time | Training Accuracy | Validation Accuracy |
+-----------+----------+--------------+-------------------+---------------------+
| 1         | 2        | 0.000436     | 0.773481          | 0.878788            |
| 2         | 3        | 0.001410     | 0.977901          | 1.000000            |
| 3         | 4        | 0.001914     | 0.994475          | 1.000000            |
| 4         | 5        | 0.002573     | 1.000000          | 1.000000            |
| 5         | 6        | 0.003101     | 0.994475          | 1.000000            |
| 7         | 8        | 0.004689     | 0.994475          | 1.000000            |
+-----------+----------+--------------+-------------------+---------------------+
SUCCESS: Optimal solution found.

Realizar una Evaluacion del Modelo

Se realizar la evaluacion del modelo creado

In [45]:
# Se evalua el desempeño del modelo
student_model.evaluate(test_data, metric='roc_curve')
Out[45]:
{'roc_curve': Columns:
 	threshold	float
 	fpr	float
 	tpr	float
 	p	int
 	n	int
 
 Rows: 100001
 
 Data:
 +-----------+------+-----+---+----+
 | threshold | fpr  | tpr | p | n  |
 +-----------+------+-----+---+----+
 |    0.0    | 1.0  | 1.0 | 8 | 25 |
 |   1e-05   | 1.0  | 1.0 | 8 | 25 |
 |   2e-05   | 0.96 | 1.0 | 8 | 25 |
 |   3e-05   | 0.96 | 1.0 | 8 | 25 |
 |   4e-05   | 0.92 | 1.0 | 8 | 25 |
 |   5e-05   | 0.92 | 1.0 | 8 | 25 |
 |   6e-05   | 0.92 | 1.0 | 8 | 25 |
 |   7e-05   | 0.92 | 1.0 | 8 | 25 |
 |   8e-05   | 0.92 | 1.0 | 8 | 25 |
 |   9e-05   | 0.92 | 1.0 | 8 | 25 |
 +-----------+------+-----+---+----+
 [100001 rows x 5 columns]
 Note: Only the head of the SFrame is printed.
 You can use print_rows(num_rows=m, num_columns=n) to print more rows and columns.}

Aplicar el Clasificador de Estudiantes

Se crea una columna donde se establecen los datos de predichos de los estudiantes

In [46]:
students['predicted_students'] = student_model.predict(students, output_type = 'probability')
students
Out[46]:
ESTUDIANTE R S CURSO J10 Estrato AÑO ECONOMIA FÍSICA QUÍMICA SOCIALES
AGREDO TORRES KAROL
MELISA ...
N F 1001 M 2 2016 69.7 73 60.66666667 72.0
ARIZA MARTINEZ CAMPVERLLY
SAMANTHA ...
N F 1001 M 2 2016 68.7 68 65.33333333 72.66666667
CAÑON SUAREZ JESSICA
VIVIANA ...
N F 1001 M 2 2016 42.7 45 35.0 36.66666667
CASALLAS HUERFANO LINA
MARIA ...
N F 1001 M 2 2016 74.7 63 62.66666667 73.33333333
CHUNZA GOMEZ LIZETH
ANDREA ...
N F 1001 M 2 2016 65.0 53 49.66666667 70.66666667
FARFAN PULIDO ANDRES
FELIPE ...
N M 1001 M 2 2016 43.3 43 33.33333333 23.33333333
GALINDO MORENO MARILYN
DANIELA ...
N F 1001 M 2 2016 60.7 60 57.33333333 64.66666667
GAVIRIA HERRERA SANTIAGO N M 1001 M 2 2016 62.3 52 40.33333333 59.0
GOMEZ ROMERO JONATHAN N M 1001 M 2 2016 63.0 55 51.33333333 63.33333333
GONZALEZ RODRIGUEZ HENRY
JOEL ...
N M 1001 M 2 2016 61.7 54 54.0 56.66666667
EDUCACION ARTISTICA RECREACIÓN Y DEPORTES RELIGION ETICA FILOSOFIA INGLES LENGUA CASTELLANA
78.33333333 62.33333333 68.33333333 74.66666667 80.33333333 65.66666667 71.66666667
79.33333333 71.66666667 69.33333333 73.66666667 62.33333333 60.0 74.0
40.0 53.0 46.33333333 41.66666667 30.0 42.33333333 31.66666667
78.33333333 67.66666667 76.0 75.33333333 71.0 69.0 72.33333333
57.0 52.66666667 66.66666667 70.33333333 61.0 58.66666667 64.66666667
56.0 47.66666667 48.66666667 23.33333333 38.33333333 42.0 36.66666667
81.66666667 51.0 68.0 69.66666667 61.66666667 59.0 63.33333333
67.33333333 48.33333333 56.33333333 56.66666667 60.0 53.33333333 68.66666667
61.0 66.66666667 60.33333333 73.33333333 60.0 61.0 56.66666667
67.0 66.0 64.33333333 57.0 64.0 60.66666667 58.33333333
TRIGONOMETRIA ADMINISTRACION MANEJO ORDENADORES PREPARACIÓN TECNOLÓGICA CALCULO CONVENCIONES MINISTERIO
71.33333333 78.0 79.0 70.33333333 75.66666667 BASICO
65.33333333 62.33333333 85.66666667 68.66666667 69.33333333 BASICO
36.66666667 43.66666667 48.33333333 35.66666667 -1.0 BAJO
67.33333333 77.66666667 79.0 71.33333333 77.0 BASICO
54.0 66.66666667 78.0 67.33333333 70.33333333 BASICO
24.33333333 26.66666667 60.66666667 16.66666667 -1.0 BAJO
68.33333333 66.0 74.33333333 60.66666667 73.66666667 BASICO
54.33333333 65.66666667 63.0 51.0 -1.0 BAJO
66.0 49.33333333 76.66666667 65.0 64.0 BASICO
60.0 66.0 68.66666667 62.33333333 -1.0 BAJO
C11 J11 A11 logic_math predicted_students
1101 M 2017 0 0.0008594193333371009
1101 M 2017 0 0.013902055916266066
None None None 1 0.9999999999976954
1101 M 2017 0 0.00047716666114851864
1101 M 2017 0 0.008983877801572069
None None None 1 0.9999999999976954
1101 M 2017 0 0.00207600172656795
None None None 1 0.9999999999976954
1102 M 2017 0 0.12936056544712063
None None None 1 0.9999999999976954
[214 rows x 29 columns]
Note: Only the head of the SFrame is printed.
You can use print_rows(num_rows=m, num_columns=n) to print more rows and columns.
In [47]:
students_reviews = students[students['S']== 'F']
students_reviews
Out[47]:
ESTUDIANTE R S CURSO J10 Estrato AÑO ECONOMIA FÍSICA QUÍMICA SOCIALES
AGREDO TORRES KAROL
MELISA ...
N F 1001 M 2 2016 69.7 73 60.66666667 72.0
ARIZA MARTINEZ CAMPVERLLY
SAMANTHA ...
N F 1001 M 2 2016 68.7 68 65.33333333 72.66666667
CAÑON SUAREZ JESSICA
VIVIANA ...
N F 1001 M 2 2016 42.7 45 35.0 36.66666667
CASALLAS HUERFANO LINA
MARIA ...
N F 1001 M 2 2016 74.7 63 62.66666667 73.33333333
CHUNZA GOMEZ LIZETH
ANDREA ...
N F 1001 M 2 2016 65.0 53 49.66666667 70.66666667
GALINDO MORENO MARILYN
DANIELA ...
N F 1001 M 2 2016 60.7 60 57.33333333 64.66666667
LUIS LEGUIZAMON DAYANA
SOFIA ...
N F 1001 M 2 2016 76.3 66 63.33333333 81.5
MARTINEZ DUARTE CAMILA
FERNANDA ...
N F 1001 M 2 2016 69.0 68 71.0 76.33333333
MARTINEZ LOAIZA JESSICA
ALEJANDRA ...
N F 1001 M 2 2016 59.7 64 48.66666667 58.66666667
MEDINA PINTO SARY
ALEJANDRA ...
N F 1001 M 2 2016 62.3 64 60.66666667 58.66666667
EDUCACION ARTISTICA RECREACIÓN Y DEPORTES RELIGION ETICA FILOSOFIA INGLES LENGUA CASTELLANA
78.33333333 62.33333333 68.33333333 74.66666667 80.33333333 65.66666667 71.66666667
79.33333333 71.66666667 69.33333333 73.66666667 62.33333333 60.0 74.0
40.0 53.0 46.33333333 41.66666667 30.0 42.33333333 31.66666667
78.33333333 67.66666667 76.0 75.33333333 71.0 69.0 72.33333333
57.0 52.66666667 66.66666667 70.33333333 61.0 58.66666667 64.66666667
81.66666667 51.0 68.0 69.66666667 61.66666667 59.0 63.33333333
74.0 66.33333333 72.33333333 76.0 82.0 72.66666667 82.0
69.66666667 70.33333333 78.66666667 77.0 85.33333333 72.0 76.0
68.33333333 65.33333333 74.0 65.33333333 60.0 63.0 65.33333333
70.0 60.33333333 60.0 58.66666667 66.0 73.66666667 63.66666667
TRIGONOMETRIA ADMINISTRACION MANEJO ORDENADORES PREPARACIÓN TECNOLÓGICA CALCULO CONVENCIONES MINISTERIO
71.33333333 78.0 79.0 70.33333333 75.66666667 BASICO
65.33333333 62.33333333 85.66666667 68.66666667 69.33333333 BASICO
36.66666667 43.66666667 48.33333333 35.66666667 -1.0 BAJO
67.33333333 77.66666667 79.0 71.33333333 77.0 BASICO
54.0 66.66666667 78.0 67.33333333 70.33333333 BASICO
68.33333333 66.0 74.33333333 60.66666667 73.66666667 BASICO
71.0 74.0 92.0 72.66666667 75.0 BASICO
73.66666667 72.66666667 82.66666667 71.0 -1.0 BAJO
66.66666667 70.66666667 81.0 75.0 72.0 BASICO
71.33333333 69.0 83.66666667 84.33333333 -1.0 BAJO
C11 J11 A11 logic_math predicted_students
1101 M 2017 0 0.0008594193333371009
1101 M 2017 0 0.013902055916266066
None None None 1 0.9999999999976954
1101 M 2017 0 0.00047716666114851864
1101 M 2017 0 0.008983877801572069
1101 M 2017 0 0.00207600172656795
1101 M 2017 0 0.0011532619180817032
None None None 1 0.9999999999976954
1101 M 2017 0 0.004323891287538867
None None None 1 0.9999999999976954
[? rows x 29 columns]
Note: Only the head of the SFrame is printed. This SFrame is lazily evaluated.
You can use sf.materialize() to force materialization.

Ordenar los Estudiantes segun la nota predecida

Se ordenan los datos para facilitar su visualización

In [48]:
students_reviews = students_reviews.sort('predicted_students', ascending=False)
students_reviews['predicted_students']
Out[48]:
dtype: float
Rows: 116
[0.9999999999976954, 0.9999999999976954, 0.9999999999976954, 0.9999999999976954, 0.9999999999976954, 0.9999999999976954, 0.9999999999976954, 0.9999999999976954, 0.9999999999976954, 0.9999999999976954, 0.9999999999976954, 0.9150335288960079, 0.9150335288960079, 0.9150335288960079, 0.9150335288960079, 0.9150335288960079, 0.9150335288960079, 0.9150335288960079, 0.9150335288960079, 0.9150335288960079, 0.9150335288960079, 0.9150335288960079, 0.9150335288960079, 0.9150335288960079, 0.9150335288960079, 0.9150335288960079, 0.9150335288960079, 0.9150335288960079, 0.9150335288960079, 0.9150335288960079, 0.9150335288960079, 0.9150335288960079, 0.9150335288960079, 0.9150335288960079, 0.9150335288960079, 0.9150335288960079, 0.9150335288960079, 0.9150335288960079, 0.9150335288960079, 0.9150335288960079, 0.6776203092231332, 0.4649815813410904, 0.3930069114067918, 0.3286366658829335, 0.3253972994281613, 0.26435323232706737, 0.23673620018266578, 0.1876970556287616, 0.1876970556287616, 0.14502696179136373, 0.12936056544712063, 0.12936056544712063, 0.09965972287069574, 0.09834675162201748, 0.043764901351169797, 0.03344489579248053, 0.028182379146935152, 0.028182379146935152, 0.028182379146935152, 0.024772290156680934, 0.021765583056233676, 0.021765583056233676, 0.021765583056233676, 0.01830598763459913, 0.01830598763459913, 0.016071186568469967, 0.013902055916266066, 0.012022115947451966, 0.010393716029159982, 0.010393716029159982, 0.010393716029159982, 0.008983877801572069, 0.008983877801572069, 0.005795394780615419, 0.005006132847925033, 0.004323891287538867, 0.004323891287538867, 0.004323891287538867, 0.004323891287538867, 0.002784644607043176, 0.002404418434314465, 0.002404418434314465, 0.00207600172656795, 0.0017923624858579225, 0.0017923624858579225, 0.0015703254850705833, 0.0015703254850705833, 0.0015474161168096251, 0.0013358996021753738, 0.0011532619180817032, 0.0011532619180817032, 0.0011532619180817032, 0.0008594193333371009, 0.0008594193333371009, 0.0006498874369061764, 0.0006498874369061764, 0.0006498874369061764, 0.00047716666114851864, 0.00047716666114851864, 0.00035552681909932683, ... ]
In [49]:
students_reviews['predicted_students'].tail()
Out[49]:
dtype: float
Rows: 10
[0.00017286927437613268, 0.00012690965662497222, 3.9095836660137104e-05, 1.0394782159676297e-05, 8.9720301387078e-06, 7.744011168062518e-06, 4.297999072149885e-06, 3.7097213236289467e-06, 6.342188947645615e-07, 4.078152044272551e-07]

Visualizacion de Resultados

In [50]:
# Estudiante con mas probabilidades de Perder Calculo
students_reviews[0]
Out[50]:
{'ESTUDIANTE': 'CAÑON SUAREZ JESSICA VIVIANA',
 'R': 'N',
 'S': 'F',
 'CURSO': 1001,
 'J10': 'M',
 'Estrato': 2,
 'AÑO': 2016,
 'ECONOMIA': 42.7,
 'FÍSICA': 45,
 'QUÍMICA': 35.0,
 'SOCIALES': 36.66666667,
 'EDUCACION ARTISTICA': 40.0,
 'RECREACIÓN Y DEPORTES': 53.0,
 'RELIGION': 46.33333333,
 'ETICA': 41.66666667,
 'FILOSOFIA': 30.0,
 'INGLES': 42.33333333,
 'LENGUA CASTELLANA': 31.66666667,
 'TRIGONOMETRIA': 36.66666667,
 'ADMINISTRACION': 43.66666667,
 'MANEJO  ORDENADORES': 48.33333333,
 'PREPARACIÓN TECNOLÓGICA': 35.66666667,
 'CALCULO': -1.0,
 'CONVENCIONES MINISTERIO': 'BAJO',
 'C11': 'None',
 'J11': 'None',
 'A11': 'None',
 'logic_math': 1,
 'predicted_students': 0.9999999999976954}
In [51]:
# Estudiante con mas probabilidades de Pasar Calculo
students_reviews[-1]
Out[51]:
{'ESTUDIANTE': 'LIZARAZO PINZON DEVI STHEFANY',
 'R': 'N',
 'S': 'F',
 'CURSO': 1003,
 'J10': 'M',
 'Estrato': 2,
 'AÑO': 2017,
 'ECONOMIA': 63.7,
 'FÍSICA': 71,
 'QUÍMICA': 70.0,
 'SOCIALES': 77.7,
 'EDUCACION ARTISTICA': 85.0,
 'RECREACIÓN Y DEPORTES': 72.0,
 'RELIGION': 65.7,
 'ETICA': 79.0,
 'FILOSOFIA': 73.0,
 'INGLES': 69.0,
 'LENGUA CASTELLANA': 75.0,
 'TRIGONOMETRIA': 88.0,
 'ADMINISTRACION': 0.0,
 'MANEJO  ORDENADORES': 96.0,
 'PREPARACIÓN TECNOLÓGICA': 82.0,
 'CALCULO': 93.0,
 'CONVENCIONES MINISTERIO': 'SUPERIOR',
 'C11': '1103',
 'J11': 'M',
 'A11': '2018',
 'logic_math': 0,
 'predicted_students': 4.078152044272551e-07}
In [52]:
students.dtype
Out[52]:
dtype: int
Rows: 214
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, ... ]

Realizar el Entrenamiento de los Datos

In [53]:
# Se crean la variables de entrenamiento y los datos de prueba
train_data,test_data = students.random_split(.8,seed=0)
# Se establece el modelo de regresion logistica
student_model = tr.logistic_classifier.create(train_data,
                                              target='logic_math',
                                              features=['CALCULO'],
                                              validation_set=test_data)
Logistic regression:
--------------------------------------------------------
Number of examples          : 181
Number of classes           : 2
Number of feature columns   : 1
Number of unpacked features : 1
Number of coefficients      : 2
Starting Newton Method
--------------------------------------------------------
+-----------+----------+--------------+-------------------+---------------------+
| Iteration | Passes   | Elapsed Time | Training Accuracy | Validation Accuracy |
+-----------+----------+--------------+-------------------+---------------------+
| 1         | 2        | 0.002493     | 0.994475          | 1.000000            |
| 2         | 3        | 0.004386     | 0.994475          | 1.000000            |
| 3         | 4        | 0.005078     | 0.994475          | 1.000000            |
| 4         | 5        | 0.005737     | 0.994475          | 1.000000            |
| 5         | 6        | 0.006444     | 0.994475          | 1.000000            |
| 6         | 7        | 0.007147     | 0.994475          | 1.000000            |
+-----------+----------+--------------+-------------------+---------------------+
SUCCESS: Optimal solution found.

Realizar una Evaluacion del Modelo

In [54]:
student_model.evaluate(test_data, metric='roc_curve')
Out[54]:
{'roc_curve': Columns:
 	threshold	float
 	fpr	float
 	tpr	float
 	p	int
 	n	int
 
 Rows: 100001
 
 Data:
 +-----------+--------------------+-----+----+----+
 | threshold |        fpr         | tpr | p  | n  |
 +-----------+--------------------+-----+----+----+
 |    0.0    |        1.0         | 1.0 | 11 | 22 |
 |   1e-05   | 0.9545454545454546 | 1.0 | 11 | 22 |
 |   2e-05   | 0.9545454545454546 | 1.0 | 11 | 22 |
 |   3e-05   | 0.8636363636363636 | 1.0 | 11 | 22 |
 |   4e-05   | 0.8636363636363636 | 1.0 | 11 | 22 |
 |   5e-05   | 0.8636363636363636 | 1.0 | 11 | 22 |
 |   6e-05   | 0.8636363636363636 | 1.0 | 11 | 22 |
 |   7e-05   | 0.8181818181818182 | 1.0 | 11 | 22 |
 |   8e-05   | 0.8181818181818182 | 1.0 | 11 | 22 |
 |   9e-05   | 0.8181818181818182 | 1.0 | 11 | 22 |
 +-----------+--------------------+-----+----+----+
 [100001 rows x 5 columns]
 Note: Only the head of the SFrame is printed.
 You can use print_rows(num_rows=m, num_columns=n) to print more rows and columns.}

Aplicar el Clasificador de Estudiantes

In [55]:
students['predicted_students'] = student_model.predict(students, output_type = 'probability')
students
Out[55]:
ESTUDIANTE R S CURSO AÑO ECONOMIA FÍSICA QUÍMICA SOCIALES EDUCACION ARTISTICA
AGREDO TORRES KAROL
MELISA ...
N F 1001 2016 69.7 73 60.66666667 72.0 78.33333333
AGUILERA GUERRERO JOSTEIN
STEVEN ...
N M 1003 2016 73.7 75 70.0 69.0 75.0
ALBARRACIN RODRIGUEZ
JESID ALEXANDER ...
N M 1002 2017 70.7 71 76.0 79.3 85.0
ALBARRACIN RODRIGUEZ
JOSET DAVID ...
N M 1002 2017 73.3 82 79.0 78.7 88.3
ALTUZARRA CASTILLO ANGIE
KATHERIN ...
N F 1001 2017 67.3 78 70.0 86.3 66.7
AMADO PARDO DUVAN CAMILO N M 1002 2016 70.3 74 79.0 75.0 78.0
AMAYA VELASQUEZ MIGUEL
ANGEL ...
N M 1003 2017 63.7 67 63.0 75.3 73.3
ANGARITA BELTRAN PAULA
ANDREA ...
N F 1001 2017 64.7 64 44.0 54.7 67.7
AREVALO RODRIGUEZ ASLY
NATALY ...
N F 1002 2016 73.0 73 83.0 73.0 83.3
AREVALO YAMA STIVEN
ANDRES ...
N M 1003 2017 60.0 61 52.0 68.0 55.0
RECREACIÓN Y DEPORTES RELIGION ETICA FILOSOFIA INGLES LENGUA CASTELLANA TRIGONOMETRIA
62.33333333 68.33333333 74.66666667 80.33333333 65.66666667 71.66666667 71.33333333
65.3 81.7 78.7 91.0 74.0 84.0 76.0
74.7 91.3 87.3 83.3 78.0 81.0 91.0
76.7 95.3 83.7 83.3 82.0 95.0 93.3
69.7 93.7 83.7 80.0 77.0 88.0 76.7
68.0 73.3 76.0 70.3 71.0 82.0 61.3
68.0 60.0 76.3 95.0 64.0 71.0 77.3
63.0 33.3 56.7 64.0 58.0 70.0 59.0
70.0 81.0 80.0 85.7 81.0 82.0 67.0
66.7 70.3 69.0 61.3 60.0 60.0 65.3
ADMINISTRACION MANEJO ORDENADORES PREPARACIÓN TECNOLÓGICA CALCULO C11 A11 JORNADA ESTRATO logic_math
78.0 79.0 70.33333333 75.6667 1101 2017 MAÑANA 2 0
72.0 95.0 88.0 87.6667 1103 2017 MAÑANA 2 0
None 95.0 89.0 86.0 1102 2018 MAÑANA 1 0
None 94.0 91.0 85.7 1102 2018 MAÑANA 2 0
None 90.0 76.0 76.3 1101 2018 MAÑANA 2 0
78.0 78.0 70.0 79.3333 1102 2017 MAÑANA 2 0
None 81.0 67.0 68.3 1103 2018 MAÑANA 2 0
None 77.0 61.0 63.0 1101 2018 MAÑANA 1 0
75.0 83.0 88.0 82.6667 1102 2017 MAÑANA 2 0
None 74.0 65.0 67.0 1103 2018 MAÑANA 2 0
predicted_students
0.0009294988663506015
5.207409790988904e-06
1.0700581786827589e-05
1.2181687810479954e-05
0.0007071225793659439
0.00019074910389449252
0.021954000437429597
0.18148031696891703
4.518036043937327e-05
0.03787525361984694
[214 rows x 27 columns]
Note: Only the head of the SFrame is printed.
You can use print_rows(num_rows=m, num_columns=n) to print more rows and columns.
In [56]:
students_reviews = students[students['S']== 'F']
students_reviews
Out[56]:
ESTUDIANTE R S CURSO AÑO ECONOMIA FÍSICA QUÍMICA SOCIALES EDUCACION ARTISTICA
AGREDO TORRES KAROL
MELISA ...
N F 1001 2016 69.7 73 60.66666667 72.0 78.33333333
ALTUZARRA CASTILLO ANGIE
KATHERIN ...
N F 1001 2017 67.3 78 70.0 86.3 66.7
ANGARITA BELTRAN PAULA
ANDREA ...
N F 1001 2017 64.7 64 44.0 54.7 67.7
AREVALO RODRIGUEZ ASLY
NATALY ...
N F 1002 2016 73.0 73 83.0 73.0 83.3
ARIZA MARTINEZ CAMPVERLLY
SAMANTHA ...
N F 1001 2016 68.7 68 65.33333333 72.66666667 79.33333333
BALLEN PRECIADO CAMILA
ANDREA ...
N F 1001 2017 59.7 64 56.0 65.3 80.0
BARBOSA SANCHEZ YULIETH
STEFANNY ...
N F 1003 2016 68.7 73 65.0 70.0 75.3
BAREÑO YALANDA HASVEIDY
KATERINE ...
N F 1003 2016 57.3 63 60.0 60.3 62.0
BARRERA GONZALEZ JESSICA
TATIANA ...
N F 1003 2016 79.7 79 77.0 76.3 85.0
BARRIOS GARCIA SHELCY
VIVIANA ...
N F 1002 2016 68.3 61 60.0 66.3 59.3
RECREACIÓN Y DEPORTES RELIGION ETICA FILOSOFIA INGLES LENGUA CASTELLANA TRIGONOMETRIA
62.33333333 68.33333333 74.66666667 80.33333333 65.66666667 71.66666667 71.33333333
69.7 93.7 83.7 80.0 77.0 88.0 76.7
63.0 33.3 56.7 64.0 58.0 70.0 59.0
70.0 81.0 80.0 85.7 81.0 82.0 67.0
71.66666667 69.33333333 73.66666667 62.33333333 60.0 74.0 65.33333333
60.7 62.7 67.7 83.3 70.0 68.0 62.7
73.3 80.0 78.7 85.3 69.0 82.0 74.0
62.3 65.7 74.0 60.7 61.0 60.0 56.3
84.0 85.3 79.3 89.3 72.0 93.0 81.3
60.0 68.0 72.7 78.0 68.0 62.0 53.7
ADMINISTRACION MANEJO ORDENADORES PREPARACIÓN TECNOLÓGICA CALCULO C11 A11 JORNADA ESTRATO logic_math
78.0 79.0 70.33333333 75.6667 1101 2017 MAÑANA 2 0
None 90.0 76.0 76.3 1101 2018 MAÑANA 2 0
None 77.0 61.0 63.0 1101 2018 MAÑANA 1 0
75.0 83.0 88.0 82.6667 1102 2017 MAÑANA 2 0
62.33333333 85.66666667 68.66666667 69.3333 1101 2017 MAÑANA 2 0
None 81.0 77.0 76.3 1103 2018 MAÑANA 2 0
74.0 87.0 77.0 79.0 1103 2017 MAÑANA 3 0
58.0 69.0 65.0 62.0 1103 2017 MAÑANA 2 0
78.0 91.0 93.0 86.3333 1103 2017 MAÑANA 2 0
58.0 73.0 66.0 61.3333 1101 2017 MAÑANA 3 0
predicted_students
0.0009294988663506015
0.0007071225793659439
0.18148031696891703
4.518036043937327e-05
0.014159329212896758
0.0007071225793659439
0.00022029252997992968
0.25460019669234774
9.26526652268426e-06
0.3130004071722924
[? rows x 27 columns]
Note: Only the head of the SFrame is printed. This SFrame is lazily evaluated.
You can use sf.materialize() to force materialization.

Ordenar los Estudiantes segun la nota predecida

In [57]:
students_reviews = students_reviews.sort('predicted_students', ascending=False)
students_reviews['predicted_students']
Out[57]:
dtype: float
Rows: 127
[0.904920040373383, 0.904920040373383, 0.904920040373383, 0.904920040373383, 0.904920040373383, 0.904920040373383, 0.904920040373383, 0.904920040373383, 0.904920040373383, 0.904920040373383, 0.904920040373383, 0.904920040373383, 0.904920040373383, 0.904920040373383, 0.904920040373383, 0.904920040373383, 0.904920040373383, 0.904920040373383, 0.904920040373383, 0.904920040373383, 0.904920040373383, 0.904920040373383, 0.904920040373383, 0.904920040373383, 0.904920040373383, 0.904920040373383, 0.904920040373383, 0.904920040373383, 0.6579719722539445, 0.555309151600646, 0.555309151600646, 0.555309151600646, 0.4476974541278717, 0.37799307185045816, 0.3161029420614644, 0.3130004071722924, 0.25460019669234774, 0.22824400339125306, 0.20386296122907488, 0.20386296122907488, 0.18148031696891703, 0.18148031696891703, 0.18148031696891703, 0.1407787402074131, 0.12581557506243843, 0.12581557506243843, 0.09738962666044967, 0.09613200686352698, 0.04348754503087077, 0.03787525361984694, 0.033424076737770675, 0.033424076737770675, 0.033424076737770675, 0.033424076737770675, 0.033424076737770675, 0.032962297414806274, 0.028268458251096328, 0.028268458251096328, 0.028268458251096328, 0.024917052469684457, 0.024917052469684457, 0.024917052469684457, 0.021954000437429597, 0.021954000437429597, 0.021954000437429597, 0.018533701127187323, 0.018533701127187323, 0.016317033203783967, 0.014159329212896758, 0.014159329212896758, 0.012282864820375829, 0.010652847132509309, 0.010652847132509309, 0.010652847132509309, 0.010652847132509309, 0.009237120642999315, 0.009237120642999315, 0.009237120642999315, 0.007894173106345907, 0.006941014835096334, 0.006015578627988955, 0.005212657809803537, 0.00513856885519102, 0.00513856885519102, 0.004516613047989859, 0.004516613047989859, 0.004516613047989859, 0.004516613047989859, 0.0039131453476086075, 0.002936517674931979, 0.002543628136603734, 0.002543628136603734, 0.0022030938592485414, 0.0019081445059617908, 0.0019081445059617908, 0.001676529937619111, 0.001676529937619111, 0.001652617455790608, 0.0014311981987690182, 0.0012394615676627003, ... ]
In [58]:
students_reviews['predicted_students'].tail()
Out[58]:
dtype: float
Rows: 10
[0.0001430093000933575, 4.518036043937327e-05, 1.2358244076025793e-05, 1.0700581786827589e-05, 9.26526652268426e-06, 5.207409790988904e-06, 4.508914096159402e-06, 8.005663555127518e-07, 6.001757719799423e-07, 5.196708987177571e-07]

Visualizacion de Resultados

In [59]:
# Estudiante con mas probabilidades de Perder Calculo
students_reviews[0]
Out[59]:
{'ESTUDIANTE': 'SOLARTE QUIÑONES LEYDY MARCELA',
 'R': 'N',
 'S': 'F',
 'CURSO': 1001,
 'AÑO': 2016,
 'ECONOMIA': 62.7,
 'FÍSICA': 60,
 'QUÍMICA': 55.33333333,
 'SOCIALES': 61.66666667,
 'EDUCACION ARTISTICA': 62.0,
 'RECREACIÓN Y DEPORTES': 61.66666667,
 'RELIGION': 60.0,
 'ETICA': 65.0,
 'FILOSOFIA': 60.66666667,
 'INGLES': 65.66666667,
 'LENGUA CASTELLANA': 54.33333333,
 'TRIGONOMETRIA': 46.33333333,
 'ADMINISTRACION': 62.66666667,
 'MANEJO ORDENADORES': 75.33333333,
 'PREPARACIÓN TECNOLÓGICA': 75.0,
 'CALCULO': 54.3,
 'C11': 1102,
 'A11': 2018,
 'JORNADA': 'MAÑANA',
 'ESTRATO': 2,
 'logic_math': 1,
 'predicted_students': 0.904920040373383}